#include<iostream>
#include<string.h>
#include<math.h>
#define maxsize 100
using namespace std;
bool isshowonce(int f[],int size,int n)
{//判断序列是否满足每个数字只出现一次的条件
	int visit[maxsize]={0};
	for(int i=0;i<size;i++)//有size个十进制数
	{
		int num=0;
		for(int j=0;j<n;j++)//n为二进制构成一个十进制
		{
			num=num*2+f[(i+j)%size]; //滚动计算当前n位所表示的数字
		}
		if(visit[num]==1)  //当前数字已出现过，返回false
		{
			return false;
		}
		else
		{
			visit[num]=1;//没访问过的标记访问
		}

	}
	return true;
}
void fun(int n)//生成二进制数组
{
	int size=pow(2,n);
	int *f=(int *)malloc(sizeof(int)*size);//存放二进制数
	memset(f,0,sizeof(int)*size);
	while(1)
	{
		int j=0;
		while(f[j]==1)
		{
			f[j++]=0;
		}
		f[j]=1;
		if(isshowonce(f,size,n)==true)
		{
			for(int i=0;i<size;i++)
				printf("%d ",f[i]);
			return;
		}
	}
}
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
		fun(n);

    return 0;
}
